package com.example.demo.util;

import com.example.demo.bean.Word;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Jim Chen
 * @date 2021-04-20
 */
public class ExcelUtil {

    public static List<Word> read(String path) {
        XSSFWorkbook xssfWorkbook = null;
        List<Word> wordList = new ArrayList<>();
        try {
            //创建工作簿
            xssfWorkbook = new XSSFWorkbook(path);
            //创建工作表
            XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
            //获取最后一行是第几行
            int lastRowNum = sheet.getLastRowNum();
            //由于第一行是字段名称，不做读取，后面建表的时候生成字段，因此这里从第二行开始读取，注意第二行的下标是1
            for (int i = 1; i < lastRowNum; i++) {
                //获取行
                XSSFRow row = sheet.getRow(i);
                //进行行的非空判断后，在遍历，避免空指针
                if(row != null){
                    //实例化一个List集合，用于存放一行读取出来的所有单元数据
                    List<String> list = new ArrayList<>();
                    //遍历行
                    for (Cell cell : row) {
                        //获得单元格，对单元格进行非空判断
                        if(cell != null){
                            //设置单元格数据的类型为字符串，这样即使表中数据有其他类型，也不用考虑类型转换，考虑不周有可能发生的类型转换异常
                            cell.setCellType(CellType.STRING);
                            //获取单元格的数据
                            String value = cell.getStringCellValue();
                            //将每个单元格数据加入List集合中
                            list.add(value);
                        }
                    }
                    //将读取出的每个行的数据封装成一个Word对象
                    Word product = new Word(list.get(0), list.get(1), list.get(2), list.get(3), list.get(4));
                    //将每个Word对象添加到wordList集合中，相当于一个wordList集合装的就是一个sheet表的数据
                    wordList.add(product);
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return wordList;
    }

}
